<?php

if (!defined('BASEPATH'))
  exit('No direct script access allowed');
/**
 * CodeIgniter
 *
 * An open source application development framework for PHP 5.1.6 or newer
 *
 * @package		CodeIgniter
 * @author		ExpressionEngine Dev Team
 * @copyright	Copyright (c) 2008 - 2011, EllisLab, Inc.
 * @license		http://codeigniter.com/user_guide/license.html
 * @link		http://codeigniter.com
 * @since		Version 1.0
 * @filesource
 */
// ------------------------------------------------------------------------

/**
 * CodeIgniter Smiley Helpers
 *
 * @package		CodeIgniter
 * @subpackage	Helpers
 * @category	Helpers
 * @author		ExpressionEngine Dev Team
 * @link		http://codeigniter.com/user_guide/helpers/smiley_helper.html
 */
// ------------------------------------------------------------------------

/**
 * Smiley Javascript
 *
 * Returns the javascript required for the smiley insertion.  Optionally takes
 * an array of aliases to loosely couple the smiley array to the view.
 *
 * @access	public
 * @param	mixed	alias name or array of alias->field_id pairs
 * @param	string	field_id if alias name was passed in
 * @return	array
 */
if (!function_exists('smiley_js')) {

  function smiley_js($alias = '', $field_id = '', $inline = TRUE) {
    static $do_setup = TRUE;

    $r = '';

    if ($alias != '' && !is_array($alias)) {
      $alias = array($alias => $field_id);
    }

    if ($do_setup === TRUE) {
      $do_setup = FALSE;

      $m = array();

      if (is_array($alias)) {
        foreach ($alias as $name => $id) {
          $m[] = '"' . $name . '" : "' . $id . '"';
        }
      }

      $m = '{' . implode(',', $m) . '}';

      $r .= <<<EOF
				var smiley_map = {$m};

				function insert_smiley(smiley, field_id) {
					var el = document.getElementById(field_id), newStart;

					if ( ! el && smiley_map[field_id]) {
						el = document.getElementById(smiley_map[field_id]);

						if ( ! el)
							return false;
					}

					el.focus();
					smiley = " " + smiley;

					if ('selectionStart' in el) {
						newStart = el.selectionStart + smiley.length;

						el.value = el.value.substr(0, el.selectionStart) +
										smiley +
										el.value.substr(el.selectionEnd, el.value.length);
						el.setSelectionRange(newStart, newStart);
					}
					else if (document.selection) {
						document.selection.createRange().text = smiley;
					}
				}
EOF;
    } else {
      if (is_array($alias)) {
        foreach ($alias as $name => $id) {
          $r .= 'smiley_map["' . $name . '"] = "' . $id . '";' . "\n";
        }
      }
    }

    if ($inline) {
      return '<script type="text/javascript" charset="utf-8">/*<![CDATA[ */' . $r . '// ]]></script>';
    } else {
      return $r;
    }
  }

}

// ------------------------------------------------------------------------

/**
 * Get Clickable Smileys
 *
 * Returns an array of image tag links that can be clicked to be inserted
 * into a form field.
 *
 * @access	public
 * @param	string	the URL to the folder containing the smiley images
 * @return	array
 */
if (!function_exists('get_clickable_smileys')) {

  function get_clickable_smileys($image_url, $alias = '', $smileys = NULL) {
    // For backward compatibility with js_insert_smiley

    if (is_array($alias)) {
      $smileys = $alias;
    }

    if (!is_array($smileys)) {
      if (FALSE === ($smileys = _get_smiley_array())) {
        return $smileys;
      }
    }

    // Add a trailing slash to the file path if needed
    $image_url = rtrim($image_url, '/') . '/';

    $used = array();
    foreach ($smileys as $key => $val) {
      // Keep duplicates from being used, which can happen if the
      // mapping array contains multiple identical replacements.  For example:
      // :-) and :) might be replaced with the same image so both smileys
      // will be in the array.
      if (isset($used[$smileys[$key][0]])) {
        continue;
      }

      $link[] = "<a href=\"javascript:void(0);\" onclick=\"insert_smiley('" . $key . "', '" . $alias . "')\"><img src=\"" . $image_url . $smileys[$key][0] . "\" width=\"" . $smileys[$key][1] . "\" height=\"" . $smileys[$key][2] . "\" alt=\"" . $smileys[$key][3] . "\" style=\"border:0;\" /></a>";

      $used[$smileys[$key][0]] = TRUE;
    }

    return $link;
  }

}

// ------------------------------------------------------------------------

/**
 * Parse Smileys
 *
 * Takes a string as input and swaps any contained smileys for the actual image
 *
 * @access	public
 * @param	string	the text to be parsed
 * @param	string	the URL to the folder containing the smiley images
 * @return	string
 */
if (!function_exists('parse_smileys')) {

  function parse_smileys($str = '', $image_url = '', $smileys = NULL) {
    if ($image_url == '') {
      return $str;
    }

    if (!is_array($smileys)) {
      if (FALSE === ($smileys = _get_smiley_array())) {
        return $str;
      }
    }

    // Add a trailing slash to the file path if needed
    $image_url = preg_replace("/(.+?)\/*$/", "\\1/", $image_url);

    foreach ($smileys as $key => $val) {
      $str = str_replace($key, "<img src=\"" . $image_url . $smileys[$key][0] . "\" width=\"" . $smileys[$key][1] . "\" height=\"" . $smileys[$key][2] . "\" alt=\"" . $smileys[$key][3] . "\" style=\"border:0;\" />", $str);
    }

    return $str;
  }

}

// ------------------------------------------------------------------------

/**
 * Get Smiley Array
 *
 * Fetches the config/smiley.php file
 *
 * @access	private
 * @return	mixed
 */
if (!function_exists('_get_smiley_array')) {

  function _get_smiley_array() {
    if (defined('ENVIRONMENT') AND file_exists(APPPATH . 'config/' . ENVIRONMENT . '/smileys.php')) {
      include(APPPATH . 'config/' . ENVIRONMENT . '/smileys.php');
    } elseif (file_exists(APPPATH . 'config/smileys.php')) {
      include(APPPATH . 'config/smileys.php');
    }

    if (isset($smileys) AND is_array($smileys)) {
      return $smileys;
    }

    return FALSE;
  }

}

// ------------------------------------------------------------------------

/**
 * JS Insert Smiley
 *
 * Generates the javascript function needed to insert smileys into a form field
 *
 * DEPRECATED as of version 1.7.2, use smiley_js instead
 *
 * @access	public
 * @param	string	form name
 * @param	string	field name
 * @return	string
 */
if (!function_exists('js_insert_smiley')) {

  function js_insert_smiley($form_name = '', $form_field = '') {
    return <<<EOF
<script type="text/javascript">
	function insert_smiley(smiley)
	{
		document.{$form_name}.{$form_field}.value += " " + smiley;
	}
</script>
EOF;
  }

}


/* End of file smiley_helper.php */
/* Location: ./system/helpers/smiley_helper.php */